Page({
  data: {
    // 用户信息 - 当前登录用户
    userInfo: {
      avatar: 'https://objectstorageapi.bja.sealos.run/a0qepsyj-001/text/Default%20avatar/d907281-0.png',
      name: '我的名字'
    },
    // 聊天信息 - 可能是单聊或群聊
    chatInfo: {
      name: "孟钰源",
      avatar: "https://objectstorageapi.bja.sealos.run/a0qepsyj-001/text/Default%20avatar/d907281-1.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=a0qepsyj%2F20250326%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20250326T134952Z&X-Amz-Expires=900&X-Amz-Signature=2b1c6d51d75b11ffd18865204e3ade0e9495d45a9a6f7c0902e6a8c9cd82b630&X-Amz-SignedHeaders=host&x-id=GetObject",
      status: "在线",
      id: "123",
      type: "private" // 默认为私聊，可能的值: "private" 或 "group"
    },
    // 当前日期，用于消息分组
    currentDate: '今天',
    
    // 输入相关
    inputValue: '',
    sendButtonWidth: 0,
    isKeyboardShow: false,
    keyboardHeight: 0,
    showEmoji: false,
    showMore: false,
    keyboardHeightChanged: false,
    
    // 消息列表
    messageList: [],
    
    // emoji分类
    emojiCategories: [
      {
        name: '常用',
        emojis: ['😊', '😂', '🤣', '❤️', '👍', '🎉', '🌹', '🔥', '👏', '🙏']
      },
      {
        name: '表情',
        emojis: ['😀', '😃', '😄', '😁', '😆', '😅', '😂', '🤣', '☺️', '😊', '😇', '🙂', '🙃', '😉', '😌', '😍', '🥰', '😘', '😗', '😙', '😚', '😋', '😛', '😝', '😜', '🤪', '🤨', '🧐', '🤓', '😎', '🤩', '🥳', '😏', '😒', '😞', '😔', '😟', '😕', '🙁', '☹️', '😣', '😖', '😫', '😩', '🥺', '😢', '😭', '😤', '😠', '😡', '🤬', '🤯']
      }
    ],
    
    // 更多菜单项
    menuItems: [
      {
        icon: '/assets/icons/photo.png',
        text: '照片'
      },
      {
        icon: '/assets/icons/camera.png',
        text: '拍摄'
      },
      {
        icon: '/assets/icons/voice.png',
        text: '语音通话'
      },
      {
        icon: '/assets/icons/location.png',
        text: '位置'
      },
      {
        icon: '/assets/icons/file.png',
        text: '文件'
      }
    ],

    // 群聊特有数据
    groupMembers: [], // 群成员列表
    groupNotice: "", // 群公告
    isGroupAdmin: false, // 当前用户是否是群管理员
    showAtMemberPanel: false, // 是否显示@成员面板
    showNoticePanel: false, // 是否显示群公告面板
    atSelectMode: false, // 是否处于@选择模式
  },

  onLoad(options) {
    // 获取路由参数
    console.log('聊天页面接收到的参数:', options);
    
    // 判断聊天类型
    const chatType = options.type || 'personal'; // 默认为私聊
    
    if (chatType === 'group') {
      // 群聊初始化
      const groupName = options.name || 'Java讨论群';
      const groupAvatar = options.avatar || 'https://objectstorageapi.bja.sealos.run/a0qepsyj-001/text/Default%20avatar/group-avatar.png';
      const groupId = options.id || Date.now().toString();
      
      // 模拟群成员数据 - 实际应用中应该从服务器获取
      const groupMembers = [
        { id: 'user1', name: '张老师', avatar: 'https://objectstorageapi.bja.sealos.run/a0qepsyj-001/text/Default%20avatar/d907281-2.png', role: 'admin' },
        { id: 'user2', name: '李同学', avatar: 'https://objectstorageapi.bja.sealos.run/a0qepsyj-001/text/Default%20avatar/d907281-3.png' },
        { id: 'user3', name: '王助教', avatar: 'https://objectstorageapi.bja.sealos.run/a0qepsyj-001/text/Default%20avatar/d907281-4.png' },
        { id: 'user4', name: '赵同学', avatar: 'https://objectstorageapi.bja.sealos.run/a0qepsyj-001/text/Default%20avatar/d907281-5.png' },
        { id: 'user5', name: '钱同学', avatar: 'https://objectstorageapi.bja.sealos.run/a0qepsyj-001/text/Default%20avatar/d907281-6.png' },
        // 添加当前用户到群成员
        { id: 'current_user', name: this.data.userInfo.name, avatar: this.data.userInfo.avatar }
      ];
      
      // 模拟群公告
      const groupNotice = options.notice || "欢迎加入本群，请遵守群规则！大家有Java相关的问题可以在群里讨论。";
      
      // 检查当前用户是否为管理员
      const isAdmin = groupMembers.some(member => 
        member.id === 'current_user' && member.role === 'admin'
      );
      
      // 更新聊天信息
      this.setData({
        chatInfo: {
          id: groupId,
          name: groupName,
          avatar: groupAvatar,
          type: 'group',
          status: '在线'
        },
        groupMembers: groupMembers,
        groupNotice: groupNotice,
        isGroupAdmin: isAdmin,
        showDateDivider: true
      });
      
      // 加载群聊历史消息
      this.loadHistoryMessages('group');
      
    } else if (chatType === 'personal') {
      // 私聊初始化 - 统一处理从不同页面传来的参数
      
      // 获取聊天对象信息
      let contactName = '';
      let contactAvatar = '';
      let contactId = '';
      
      // 从options中获取参数
      if (options.name) {
        contactName = decodeURIComponent(options.name);
      } else if (options.sender) {
        contactName = decodeURIComponent(options.sender);
      } else {
        contactName = '未知用户';
      }
      
      // 获取头像
      if (options.avatar) {
        contactAvatar = decodeURIComponent(options.avatar);
      } else {
        // 根据名字选择不同的默认头像
        if (contactName.includes('孟') || contactName === '孟征源') {
          contactAvatar = "https://objectstorageapi.bja.sealos.run/a0qepsyj-001/text/Default%20avatar/d907281-0.png";
        } else if (contactName.includes('余') || contactName === '余翔宇') {
          contactAvatar = "https://objectstorageapi.bja.sealos.run/a0qepsyj-001/text/Default%20avatar/d907281-1.png";
        } else if (contactName.includes('金') || contactName === '金波') {
          contactAvatar = "https://objectstorageapi.bja.sealos.run/a0qepsyj-001/text/Default%20avatar/d928162-0.png";
        } else {
          contactAvatar = "https://objectstorageapi.bja.sealos.run/a0qepsyj-001/text/Default%20avatar/d928162-1.png";
        }
      }
      
      // 获取ID
      contactId = options.id || Date.now().toString();
      
      console.log('聊天对象:', contactName);
      
      // 随机设置在线状态（示例）
      const isOnline = Math.random() > 0.3; // 70%概率在线
      
      // 更新聊天对象信息
      this.setData({
        chatInfo: {
          name: contactName,
          avatar: contactAvatar,
          status: isOnline ? "在线" : "离线",
          isOnline: isOnline,
          id: contactId,
          type: 'personal'
        },
        showDateDivider: true
      });
      
      // 加载私聊历史消息
      this.loadHistoryMessages('personal');
    } else {
      console.error('未接收到有效参数或聊天类型无效');
      // 设置默认值，防止出错
      this.setData({
        chatInfo: {
          name: "默认联系人",
          avatar: "https://objectstorageapi.bja.sealos.run/a0qepsyj-001/text/Default%20avatar/d928162-1.png",
          status: "离线",
          id: Date.now().toString(),
          type: 'personal'
        },
        showDateDivider: true
      });
      
      // 加载默认消息
      this.loadHistoryMessages('personal');
    }
    
    // 设置导航栏标题
    wx.setNavigationBarTitle({
      title: this.data.chatInfo.name
    });
    
    // 初始化当前日期
    this.setData({
      currentDate: this.formatDate(Date.now()),
      voiceTip: "按住说话" // 确保语音提示有初始值
    });
    
    // 监听键盘高度变化
    wx.onKeyboardHeightChange(res => {
      const height = res.height;
      if (height === 0) {
        this.setData({
          isKeyboardShow: false,
          keyboardHeight: 0,
          showEmoji: false,
          showMore: false
        });
      } else {
        this.setData({
          isKeyboardShow: true,
          keyboardHeight: height,
          keyboardHeightChanged: true
        });
      }
    });
  },

  onUnload() {
    // 取消键盘高度变化监听
    wx.offKeyboardHeightChange();
  },

  // 格式化日期
  formatDate(timestamp) {
    const date = new Date(timestamp)
    const today = new Date()
    
    if (date.toDateString() === today.toDateString()) {
      return '今天'
    } else if (date.getFullYear() === today.getFullYear()) {
      return `${date.getMonth()+1}月${date.getDate()}日`
    } else {
      return `${date.getFullYear()}年${date.getMonth()+1}月${date.getDate()}日`
    }
  },

  // 格式化时间
  formatTime(timestamp) {
    const date = new Date(timestamp)
    return `${date.getHours()}:${date.getMinutes().toString().padStart(2, '0')}`
  },

  // 判断是否需要显示时间分隔
  needShowTime(prevTimestamp, currentTimestamp) {
    return (currentTimestamp - prevTimestamp) > 5 * 60 * 1000 // 5分钟间隔
  },

  // 返回上一页
  goBack() {
    wx.navigateBack()
  },

  // 输入处理
  onInput(e) {
    this.setData({ inputValue: e.detail.value })
  },

  // 输入框获取焦点
  onInputFocus(e) {
    console.log('输入框获取焦点');
    this.setData({
      inputFocus: true,
      showPanel: false, // 关闭面板
      showVoicePanel: false
    });
  },
  
  // 输入框失去焦点
  onInputBlur() {
    console.log('输入框失去焦点');
    this.setData({
      inputFocus: false
      // 不主动关闭面板，允许用户在输入框失焦后继续使用表情面板
    });
  },

  // 发送消息
  sendMessage() {
    const content = this.data.inputValue.trim()
    if (!content) return
    
    // 构建消息对象
    const newMsg = {
      id: Date.now(),
      direction: "sent",
      content: [content],
      timestamp: Date.now(),
      read: false
    }
    
    // 检查是否是群聊中的@消息
    if (this.data.chatInfo.type === 'group' && content.includes('@')) {
      // 提取@的成员列表
      const atList = [];
      this.data.groupMembers.forEach(member => {
        if (content.includes('@' + member.name + ' ') || content.includes('@' + member.name + '')) {
          atList.push(member.name);
        }
      });
      
      // 如果有@成员，添加到消息中
      if (atList.length > 0) {
        newMsg.atList = atList;
      }
    }
    
    this.setData({
      messageList: [...this.data.messageList, newMsg],
      inputValue: "",
      lastMsgId: newMsg.id,
      showPanel: false, // 发送消息后关闭面板
      atSelectMode: false // 重置@选择模式
    })
    
    // 模拟消息已读
    setTimeout(() => {
      this.setData({
        [`messageList[${this.data.messageList.length - 1}].read`]: true
      })
    }, 1000)
  },

  // 切换面板
  togglePanel(e) {
    const type = e.currentTarget.dataset.type;
    
    // 如果当前已经显示的是同一类型的面板，则隐藏
    if (this.data.showPanel && this.data.currentPanel === type) {
      this.hidePanel();
      return;
    }
    
    this.setData({
      showPanel: true,
      currentPanel: type,
      showVoicePanel: false,
      isRecording: false
    });
    
    // 如果是emoji面板，根据当前类别过滤表情
    if (type === 'emoji') {
      this.filterEmojisByCategory(this.data.currentCategory);
    }
  },
  
  // 隐藏面板
  hidePanel() {
    this.setData({
      showPanel: false
    });
  },
  
  // 切换语音/键盘输入模式
  toggleVoiceKeyboard() {
    const showVoiceInput = !this.data.showVoiceInput;
    this.setData({
      showVoiceInput: showVoiceInput,
      inputFocus: !showVoiceInput, // 如果切换到键盘模式，则自动聚焦输入框
      showPanel: false
    });
    
    // 如果切换到键盘模式，自动聚焦
    if (!showVoiceInput) {
      setTimeout(() => {
        this.setData({
          inputFocus: true
        });
      }, 100);
    }
  },
  
  // 开始语音输入
  startVoiceInput() {
    this.setData({ 
      voiceTip: "松开发送",
      isRecording: true
    });
    
    // 振动反馈
    wx.vibrateShort();
    
    // 实际开发中这里开始录音
    console.log('开始录音');
  },

  // 结束语音输入
  endVoiceInput() {
    this.setData({ 
      voiceTip: "按住说话",
      isRecording: false
    });
    
    // 实际开发中这里结束录音并发送
    console.log('录音结束');
  },
  
  // 根据分类过滤表情
  filterEmojisByCategory(category) {
    // 这里可以根据不同类别提供不同的表情
    // 目前使用默认表情列表
    this.setData({
      currentCategory: category,
      // 实际应用中根据类别过滤不同表情
      filteredEmojiList: this.data.emojiList
    });
  },
  
  // 选择表情
  selectEmoji(e) {
    const emoji = e.currentTarget.dataset.emoji;
    this.setData({
      inputValue: this.data.inputValue + emoji
    });
    // 不再隐藏面板，让用户可以继续选择表情
    
    // 添加表情时若输入框有焦点，则确保不被键盘遮挡
    if (this.data.inputFocus) {
      // 滚动到最新消息，确保视图正确
      if (this.data.messageList.length > 0) {
        this.setData({
          lastMsgId: this.data.messageList[this.data.messageList.length - 1].id
        });
      }
    }
  },

  // 切换表情分类
  switchCategory(e) {
    const category = e.currentTarget.dataset.category;
    this.filterEmojisByCategory(category);
  },

  // 处理菜单命令
  handleMenuCommand(e) {
    const type = e.currentTarget.dataset.type
    console.log("执行命令:", type)
    
    switch(type) {
      case "album":
        wx.chooseImage({
          success: (res) => {
            // 处理选择的图片
          }
        })
        break
      case "camera":
        wx.chooseImage({
          sourceType: ['camera'],
          success: (res) => {
            // 处理拍摄的照片
          }
        })
        break
      // 其他命令处理...
    }
    
    this.setData({ showPanel: false })
  },

  // 拨打电话
  makeCall() {
    wx.makePhoneCall({
      phoneNumber: '123456789' // 替换为实际号码
    })
  },
  
  // 显示更多操作
  showMoreActions() {
    wx.showActionSheet({
      itemList: ['清空聊天记录', '投诉', '取消'],
      success: (res) => {
        if (res.tapIndex === 0) {
          this.setData({ messageList: [] })
        }
      }
    })
  },

  // 切换语音输入面板
  toggleVoiceInput() {
    this.setData({
      showVoicePanel: !this.data.showVoicePanel,
      showPanel: false
    });
  },

  // 语音输入手指移动处理
  touchMoveVoice(e) {
    // 获取触摸点位置
    const touch = e.touches[0];
    const y = touch.clientY;
    
    // 获取视口高度
    const windowHeight = wx.getSystemInfoSync().windowHeight;
    
    // 判断是否上滑取消
    if (y < windowHeight - 150) {
      this.setData({
        voiceTip: "松开手指，取消发送"
      });
    } else {
      this.setData({
        voiceTip: "松开发送"
      });
    }
  },

  // 显示@成员面板
  showAtMemberSelector: function() {
    this.setData({
      showAtMemberPanel: true,
      showPanel: false, // 关闭其他面板
    });
  },
  
  // 隐藏@成员选择面板
  hideAtMemberPanel: function() {
    this.setData({
      showAtMemberPanel: false
    });
  },
  
  // 选择要@的成员
  selectAtMember: function(e) {
    const memberName = e.currentTarget.dataset.member;
    
    // 在输入框中添加@成员
    const newValue = this.data.inputValue + '@' + memberName + ' ';
    this.setData({
      inputValue: newValue,
      showAtMemberPanel: false,
      atSelectMode: true, // 标记为@选择模式
      inputFocus: true // 保持输入框聚焦
    });
  },
  
  // 显示群公告
  showGroupNotice: function() {
    this.setData({
      showNoticePanel: true
    });
  },
  
  // 隐藏群公告
  hideNoticePanel: function() {
    this.setData({
      showNoticePanel: false
    });
  },
  
  // 编辑群公告 - 仅管理员可用
  editGroupNotice: function() {
    if (!this.data.isGroupAdmin) {
      wx.showToast({
        title: '只有管理员才能编辑公告',
        icon: 'none'
      });
      return;
    }
    
    wx.showModal({
      title: '编辑群公告',
      content: this.data.groupNotice,
      editable: true,
      placeholderText: '请输入群公告内容',
      success: (res) => {
        if (res.confirm) {
          this.setData({
            groupNotice: res.content,
            showNoticePanel: false
          });
          
          // 实际应用中应该将新公告提交到服务器
          wx.showToast({
            title: '群公告已更新',
            icon: 'success'
          });
        }
      }
    });
  },
  
  // 显示群成员资料
  showMemberProfile: function(e) {
    const memberId = e.currentTarget.dataset.memberId;
    
    // 根据ID查找成员信息
    const member = this.data.groupMembers.find(m => m.id === memberId);
    if (!member) return;
    
    // 显示成员资料卡片，可以根据实际需求定制
    wx.showActionSheet({
      itemList: [
        `${member.name}${member.role === 'admin' ? ' (管理员)' : ''}`,
        '发起聊天',
        '查看资料'
      ],
      success: (res) => {
        if (res.tapIndex === 1) {
          // 发起单聊
          wx.navigateTo({
            url: `/pages/chat/chat?id=${member.id}&name=${member.name}&avatar=${encodeURIComponent(member.avatar)}&type=private`
          });
        } else if (res.tapIndex === 2) {
          // 查看资料 - 实际应用中可以跳转到用户资料页面
          wx.showToast({
            title: '查看资料功能开发中',
            icon: 'none'
          });
        }
      }
    });
  },
  
  // 隐藏所有面板
  hideAllPanels: function() {
    this.setData({
      showPanel: false,
      showAtMemberPanel: false,
      showNoticePanel: false,
      showVoicePanel: false
    });
  },

  // 加载历史消息
  loadHistoryMessages: function(chatType) {
    let messages = [];
    
    if (chatType === 'group') {
      // 群聊消息示例
      messages = [
        {
          id: 1,
          direction: "received",
          avatar: "https://objectstorageapi.bja.sealos.run/a0qepsyj-001/text/Default%20avatar/d907281-2.png",
          senderId: "user1",
          senderName: "张老师",
          content: ["大家好，欢迎加入Java编程学习小组！"],
          timestamp: Date.now() - 3600000 * 2, // 2小时前
          read: true
        },
        {
          id: 2,
          direction: "received",
          avatar: "https://objectstorageapi.bja.sealos.run/a0qepsyj-001/text/Default%20avatar/d907281-3.png",
          senderId: "user2",
          senderName: "李同学",
          content: ["老师好！请问第三章的作业什么时候截止？"],
          timestamp: Date.now() - 3600000, // 1小时前
          read: true
        },
        {
          id: 3,
          direction: "received",
          avatar: "https://objectstorageapi.bja.sealos.run/a0qepsyj-001/text/Default%20avatar/d907281-2.png",
          senderId: "user1",
          senderName: "张老师",
          content: ["下周一下午5点前提交"],
          timestamp: Date.now() - 2700000, // 45分钟前
          read: true
        },
        {
          id: 4,
          direction: "received",
          avatar: "https://objectstorageapi.bja.sealos.run/a0qepsyj-001/text/Default%20avatar/d907281-4.png",
          senderId: "user3",
          senderName: "王助教",
          content: ["@我的名字 你完成作业了吗？需要帮忙吗？"],
          timestamp: Date.now() - 1800000, // 30分钟前
          read: true,
          atList: ["我的名字"],
          atMe: true
        },
        {
          id: 5,
          direction: "sent",
          content: ["谢谢，我还在写，有几个问题待会儿问你"],
          timestamp: Date.now() - 1500000, // 25分钟前
          read: true
        }
      ];
    } else if (chatType === 'personal' || chatType === 'private') {
      // 个人聊天消息示例
      messages = [
        {
          id: 1,
          direction: "received",
          avatar: this.data.chatInfo.avatar,
          senderName: this.data.chatInfo.name,
          content: ["你好呀，很高兴认识你！"],
          timestamp: Date.now() - 3600000, // 1小时前
          read: true
        },
        {
          id: 2,
          direction: "sent",
          content: ["你好啊，我也很高兴认识你！", "我们可以一起交流学习心得"],
          timestamp: Date.now() - 1800000, // 30分钟前
          read: true
        },
        {
          id: 3,
          direction: "received",
          avatar: this.data.chatInfo.avatar,
          senderName: this.data.chatInfo.name,
          content: ["太好了，我最近在学习小程序开发，遇到了一些问题，希望能和你讨论一下"],
          timestamp: Date.now() - 900000, // 15分钟前
          read: true
        }
      ];
    } else {
      console.warn('未知聊天类型:', chatType);
      // 使用默认消息
      messages = [
        {
          id: 1,
          direction: "received",
          avatar: this.data.chatInfo.avatar,
          senderName: this.data.chatInfo.name,
          content: ["你好，这是一条默认消息"],
          timestamp: Date.now() - 3600000, // 1小时前
          read: true
        }
      ];
    }
    
    this.setData({
      messageList: messages,
      lastMsgId: messages.length > 0 ? messages[messages.length - 1].id : null
    });
  },
})